// serialport.h
#ifndef SERIALPORT_H
#define SERIALPORT_H

#include <QObject>
#include <QtSerialPort/QSerialPort>
#include <QByteArray>
#include "datahandler.h"
#include <QComboBox>


class SerialPort : public QObject
{
    Q_OBJECT

public:
    SerialPort(DataHandler *handler, QObject *parent = nullptr);
    ~SerialPort();

    /**
     * @brief 打开串口
     * 设置串口参数并尝试打开指定的串口。
     * @param portName 串口名称
     * @return 如果成功打开串口，返回 true；否则返回 false
     */
    bool openPort(const QString &portName);
    /**
     * @brief 关闭串口
     * 如果串口已打开，则关闭它。
     */
    void closePort();
    /**
     * @brief 检查串口是否已打开
     * @return 如果串口已打开，返回 true；否则返回 false
     */
    bool isOpen() const;
    /**
        * @brief 发送握手命令。
        */
    void sendHandshakeCommand();
    /**
        * @brief 发送查询设备版本号命令。
        */
    void sendDeviceVersionQuery();
    /**
        * @brief 发送查询滤光片类型命令。
        */
    void sendFilterTypesQuery();
    /**
        * @brief 发送启动自动测量数据命令。
        */
    void startAutoMeasurement();
    /**
        * @brief 发送读取自动测量数据命令。
        */
    void readAutoMeasurementData();
    /**
     * @brief 刷新可用串口列表并更新下拉框。
     * 清空现有的端口列表并填充当前可用的端口。
     */
    void refreshSerialPorts(QComboBox *comboBox);
    // //转台控制语句
    // void SetZero();
    // void SetTrace();
    // void DeflectRelative();
    // void DeflectAbsolute();
    // void SetLongitudeLatitude();
    // void SetStop();

    // void SearchGPS();
    // void SearchStatus();
    // void SearchAngle();
    // void SearchSolarAngle();

signals:
    /**
     * @brief 串口接收到数据后信号
     * @param data
     */
    void dataReceived(const QByteArray &data);
    void ceshisingle(const QByteArray &data);
private slots:
    /**
     * @brief 读取串口数据
     * 从串口读取数据并发出数据接收信号。
     */
    void readData();
    /**
        * @brief 发送特定命令的通用函数。
        * @param command 命令字节
        * @param dataLength 数据长度
        * @param data 数据内容
        */
    void sendCommand(quint8 command, quint8 dataLength, const QByteArray &data);

private:
    QSerialPort *serial;
    QByteArray buffer;
    DataHandler *dataHandler;  // 数据处理对象的引用
    quint8 m_dataId ;


};

#endif // SERIALPORT_H
